// select 语句用于在多个通道操作中进行选择。select 会阻塞，直到其中一个通道可以进行通信（发送或接收）。如果多个通道都可以进行通信，select 会随机选择一个执行。
package main

import (
	"fmt"
	"time"
)

func main() {
	var output1 = make(chan int)
	var output2 = make(chan int)
	go process1(output1)
	go process2(output2)

	// time.Sleep(7 * time.Millisecond)
	select {
	case v2 := <-output2:
		fmt.Println("output2:", v2)
	case v1 := <-output1:
		fmt.Println("output1:", v1)
		// default:
		// 	fmt.Println("output no msg available.")
	}
}

// 异步处理
func process1(chal chan<- int) {
	fmt.Println("process1 start...")
	time.Sleep(2 * time.Millisecond)
	fmt.Println("process1 end...")
	chal <- 1
}

// 异步处理
func process2(chal chan<- int) {
	fmt.Println("process2 start...")
	time.Sleep(6 * time.Millisecond)
	fmt.Println("process2 end...")
	chal <- 2
}
